/*     */ package com.java.diagnostics.visualizer.parser.vgc.sovereign;
/*     */ 
/*     */ import com.java.diagnostics.visualizer.data.DataLevel;
/*     */ import com.java.diagnostics.visualizer.data.SourceData;
/*     */ import com.java.diagnostics.visualizer.data.UnstructuredData;
/*     */ import com.java.diagnostics.visualizer.exceptions.GCAndMemoryVisualizerException;
/*     */ import com.java.diagnostics.visualizer.factory.DataFactory;
/*     */ import com.java.diagnostics.visualizer.factory.SourceDataFactory;
/*     */ import com.java.diagnostics.visualizer.gc.defaultextensions.util.Messages;
/*     */ import com.java.diagnostics.visualizer.impl.factory.LogFactory;
/*     */ import com.java.diagnostics.visualizer.parser.vgc.VGCDataManager;
/*     */ import com.java.diagnostics.visualizer.parser.vgc.VGCParserPreferenceHelper;
/*     */ import com.java.diagnostics.visualizer.parser.vgc.VGCPlainTextParser;
/*     */ import com.java.diagnostics.visualizer.parser.vgc.constants.VGCGCReasons;
/*     */ import com.java.diagnostics.visualizer.properties.OutputProperties;
/*     */ import com.java.diagnostics.visualizer.sources.Source;
/*     */ import java.io.BufferedReader;
/*     */ import java.io.IOException;
/*     */ import java.text.MessageFormat;
/*     */ import java.util.ArrayList;
/*     */ import java.util.Iterator;
/*     */ import java.util.List;
/*     */ import java.util.logging.Level;
/*     */ import java.util.logging.Logger;
/*     */ import java.util.regex.Matcher;
/*     */ import java.util.regex.Pattern;
/*     */ 
/*     */ public class InstanceSovereignVGCParser extends VGCPlainTextParser
/*     */ {
/*     */   private static final String VFY = "VFY";
/*     */   private static final String GC_DETAIL_OPEN = "<GC(";
/*     */   private static final String CON_OPEN = "<CON[";
/*  54 */   private static final Pattern VFY_PATTERN = Pattern.compile(" *GC\\(VFY-SUM\\): pinned=([0-9]*)\\(classes=([0-9]*)");
/*     */ 
/*  62 */   private static final Pattern DATE_PATTERN = Pattern.compile("[^<]? *[^<]?<GC\\(([0-9]*)\\): GC cycle started ([a-zA-Z][a-zA-Z][a-zA-Z] [a-zA-Z][a-zA-Z][a-zA-Z] [ 0-9][0-9]* [0-9][0-9]:[0-9][0-9]:[0-9][0-9] [0-9][0-9][0-9][0-9])");
/*     */ 
/*  65 */   private static final Pattern REFS_PATTERN = Pattern.compile(" *<GC\\([0-9]*\\): refs: soft ([0-9][0-9]*) \\(age >= [0-9][0-9]*\\), weak ([0-9][0-9]*), final ([0-9][0-9]*), phantom ([0-9][0-9]*)>");
/*     */ 
/*  72 */   private static final Pattern PAUSES_PATTERN = Pattern.compile(" *<GC\\([0-9]*\\): mark: ([0-9][0-9]*) ms, sweep: ([0-9][0-9]*) ms, compact: ([0-9][0-9]*) ms>");
/*     */ 
/*  79 */   private static final Pattern FREED_PATTERN = Pattern.compile(" *<GC\\([0-9]*\\): freed ([0-9][0-9]*) bytes, ([0-9][0-9]*)% free \\(([0-9][0-9]*)/([0-9][0-9]*)\\), in ([0-9][0-9]*) ms>");
/*     */ 
/*  85 */   private static final Pattern ROOT_SCAN_PATTERN = Pattern.compile(" *<GC\\([0-9]*\\): In mark: root scan ([0-9][0-9]*) ms>");
/*     */ 
/*  91 */   private static final Pattern UNLOADED_PATTERN = Pattern.compile(" *<GC\\([0-9]*\\): unloaded and freed ([0-9][0-9]*) classes>");
/*     */ 
/*  99 */   private static final Pattern AF_PATTERN = Pattern.compile(" *[^<]?<AF\\[[0-9]*\\]: Allocation Failure. need ([0-9][0-9]*) bytes, ([0-9][0-9]*) ms since last AF.*>");
/*     */ 
/* 105 */   private static final Pattern GENERIC_COMPLETED_PATTERN = Pattern.compile(" *<([A-Z][A-Z][A-Z]*)\\[[0-9]*\\]: completed in ([0-9][0-9]*) ms>");
/*     */ 
/* 112 */   private static final Pattern CON_START_PATTERN = Pattern.compile(" *<CON\\[[0-9]*\\]: Concurrent collection, \\(([0-9][0-9]*)/([0-9][0-9]*)\\) \\(([0-9][0-9]*)/([0-9][0-9]*)\\), ([0-9][0-9]*) ms since last CON or AF>");
/*     */ 
/* 119 */   private static final Pattern TRACED_PATTERN = Pattern.compile("<GC\\([0-9][0-9]*\\): Bytes Traced =[0-9][0-9]* \\(Foreground: [0-9][0-9]*\\+ Background: [0-9][0-9]*\\) State = [0-9][0-9]* >");
/*     */ 
/* 127 */   private static final Pattern CLASS_UNLOADED_PATTERN = Pattern.compile(" *<GC\\([0-9][0-9]*\\): freeing class .*>");
/*     */ 
/* 135 */   private static final Pattern CON_COMPLETED_PATTERN = Pattern.compile(" *<CON\\[[0-9]*\\]: completed in [0-9][0-9]* ms>");
/*     */ 
/* 143 */   private static final Pattern CON_ACTION_PATTERN = Pattern.compile(" *<CON\\[[0-9]*\\]: Concurrent collection, action=([0-9]) .*>");
/*     */ 
/* 150 */   private static final Pattern MANAGING_PATTERN = Pattern.compile(" *<AF\\[[0-9]*\\]: managing allocation failure, action=([0-9][0-9]*) \\(([0-9][0-9]*)/([0-9][0-9]*)\\) \\(([0-9][0-9]*)/([0-9][0-9]*)\\)>");
/*     */ 
/* 157 */   private static final Pattern MANAGING_PATTERN_2 = Pattern.compile(" *<AF\\[[0-9]*\\]: managing allocation failure, action=([0-9][0-9]*) \\(([0-9][0-9]*)/([0-9][0-9]*)\\)>");
/*     */ 
/* 160 */   private static final Pattern THREAD_TIMES_PATTERN = Pattern.compile(" *<GC\\([0-9][0-9]*\\): stop threads time: ([0-9][0-9]*), start threads time: ([0-9][0-9]*).*>");
/*     */ 
/* 163 */   private static final String REASON = Messages.getString("SovereignVGCParser.reason");
/*     */   private static final String INSUFFICIENT_SPACE = "Insufficient space in Javaheap to satisfy allocation request";
/*     */   private static final String AF_OPEN = "<AF[";
/* 170 */   public static final String VERSION = Messages.getString("SovereignVGCParser.sovereign.version");
/*     */ 
/* 173 */   private static final Logger TRACE = LogFactory.getTrace(InstanceSovereignVGCParser.class);
/*     */   private static final String OPEN_ANGLE_BRACKET = "<";
/* 177 */   private boolean isGoodData = false;
/*     */   private List<Pender> pendingData;
/*     */   private String line;
/* 187 */   private int previousNominalGCNumber = -1;
/*     */ 
/*     */   public SourceData parse(Source source, OutputProperties properties) throws GCAndMemoryVisualizerException
/*     */   {
/* 191 */     TRACE.entering(this.className, "parse");
/* 192 *          this.filterSystemGCs = PLUGIN_PREFERENCES.getFilterSystemGCs();
/*     */ 
/* 194 */     this.isGoodData = false;
/*     */ 
/* 196 */     initialiseAndClean();
/* 197 */     this.pendingData = new ArrayList();
/* 198 */     this.currentComment = 
/* 199 */       MessageFormat.format(REASON, 
/* 199 */       new Object[] { "sys" });
/*     */     try
/*     */     {
/* 202 */       String variantIdentifier = source.getVariantIdentifier();
/* 203 */       this.sourceData = 
/* 204 */         SOURCE_DATA_FACTORY.createSourceData(variantIdentifier);
/*     */ 
/* 206 */       this.dataManager = new VGCDataManager(source, this.sourceData, properties);
/*     */ 
/* 208 */       BufferedReader reader = LineFixer.wrapReader(source
/* 209 */         .getSafeBufferedStreamReader());
/*     */ 
/* 211 */       this.line = reader.readLine();
/* 212 */       while (this.line != null) {
/* 213 */         if (this.line.indexOf("<") >= 0) {
/* 214 */           handleLine();
/*     */         }
/*     */ 
/* 219 */         if (contains(this.line, "VFY")) {
/* 220 */           Matcher matcher = VFY_PATTERN.matcher(this.line);
/* 221 */           if (matcher.find()) {
/* 222 */             this.isGoodData = true;
/* 223 */             conditionallyAddPoint("VGCLabels.pinned.classes", 
/* 224 */               matcher.group(2));
/*     */           }
/*     */ 
/*     */         }
/*     */ 
/* 229 */         this.line = reader.readLine();
/*     */       }
/*     */ 
/* 232 */       if (this.isGoodData) {
/* 233 */         UnstructuredData versionData = factory.createUnstructuredData(
/* 234 */           "VGCLabels.version", 
/* 235 */           Messages.getString("VGCLabels.version"), VERSION);
/* 236 */         this.sourceData.addData(versionData, DataLevel.VARIANT);
/* 237 */         ensureTuplesAvailable();
/* 238 */         this.dataManager.complete();
/* 239 */         writeOutSourceData();
/*     */       }
/*     */ 
/* 242 */       reader.close();
/*     */     } catch (Exception e) {
/* 244 */       TRACE.log(Level.WARNING, 
/* 245 */         Messages.getString("SovereignVGCParser.caught.exception"), e);
/*     */ 
/* 247 */       this.sourceData = null;
/*     */     }
/* 249 */     TRACE.exiting(this.className, "parse");
/* 250 */     return this.sourceData;
/*     */   }
/*     */ 
/*     */   private void handleLine() throws IOException {
/* 254 */     handleAF();
/* 255 */     handleCON();
/* 256 */     handleGCDetail();
/* 257 */     handleCompleted();
/*     */   }
/*     */ 
/*     */   private final boolean contains(String string1, String string2)
/*     */   {
/* 272 */     if (string1 != null) {
/* 273 */       return string1.indexOf(string2) != -1;
/*     */     }
/* 275 */     return false;
/*     */   }
/*     */ 
/*     */   private void conditionallyAddPoint(String fieldName, String value)
/*     */   {
/* 280 */     double y = Double.parseDouble(value);
/* 281 */     conditionallyAddPoint(fieldName, y);
/*     */   }
/*     */ 
/*     */   private void conditionallyAddPoint(String fieldName, double y)
/*     */   {
/* 286 */     if (haveTimestamp()) {
/* 287 */       addDataPoint(fieldName, y);
/*     */     }
/*     */     else
/*     */     {
/* 294 */       this.pendingData.add(new Pender(fieldName, y));
/*     */     }
/*     */   }
/*     */ 
/*     */   private void handleAF()
/*     */     throws IOException
/*     */   {
/* 302 */     if ((this.line != null) && (this.line.indexOf("<AF[") >= 0))
/*     */     {
/* 305 */       this.isGoodData = true;
/* 306 */       this.isSys = false;
/*     */ 
/* 309 */       Matcher afMatcher = AF_PATTERN.matcher(this.line);
/* 310 */       if (afMatcher.matches()) {
/* 311 */         tidyUpFromSystemGC();
/* 312 */         voidTimestamp();
/*     */ 
/* 315 */         this.currentComment = 
/* 316 */           MessageFormat.format(REASON, 
/* 316 */           new Object[] { "af" });
/*     */ 
/* 319 */         conditionallyAddPoint("VGCLabels.gc.reasons", 
/* 320 */           VGCGCReasons.AF_INT);
/* 321 */         conditionallyAddPoint("VGCLabels.request.sizes.which.triggered.failures", 
/* 322 */           afMatcher.group(1));
/* 323 */         conditionallyAddPoint("VGCLabels.trigger.intervals", 
/* 324 */           afMatcher.group(2));
/*     */       } else {
/* 326 */         Matcher loaMatcher = MANAGING_PATTERN.matcher(this.line);
/* 327 */         if (loaMatcher.matches()) {
/* 328 */           String actionCode = loaMatcher.group(1);
/* 329 */           if ((actionCode.equals("3")) || (actionCode.equals("4")) || 
/* 330 */             (actionCode.equals("5")) || (actionCode.equals("6")))
/*     */           {
/* 333 */             conditionallyAddPoint("VGCLabels.action", actionCode);
/*     */           }
/*     */           else
/*     */           {
/* 337 */             voidTimestamp();
/*     */ 
/* 339 */             conditionallyAddPoint("VGCLabels.action", actionCode);
/* 340 */             conditionallyAddPoint("VGCLabels.free.soa.before.collection", 
/* 341 */               loaMatcher.group(2));
/* 342 */             conditionallyAddPoint("VGCLabels.total.soa.before", 
/* 343 */               loaMatcher.group(3));
/* 344 */             conditionallyAddPoint("VGCLabels.free.loa.before.collection", 
/* 345 */               loaMatcher.group(4));
/* 346 */             conditionallyAddPoint("VGCLabels.total.loa.before", 
/* 347 */               loaMatcher.group(5));
/*     */           }
/*     */ 
/*     */         }
/*     */         else
/*     */         {
/* 354 */           Matcher loaMatcher2 = MANAGING_PATTERN_2.matcher(this.line);
/* 355 */           if (loaMatcher2.matches()) {
/* 356 */             String code = loaMatcher2.group(1);
/* 357 */             if ((code.equals("3")) || (code.equals("4")) || 
/* 358 */               (code.equals("5")) || (code.equals("6")))
/*     */             {
/* 363 */               conditionallyAddPoint("VGCLabels.action", code);
/*     */             }
/*     */             else {
/* 366 */               voidTimestamp();
/*     */ 
/* 371 */               conditionallyAddPoint("VGCLabels.action", code);
/* 372 */               conditionallyAddPoint(
/* 373 */                 "VGCLabels.free.flat.heap.before.gc", 
/* 374 */                 loaMatcher2.group(2));
/* 375 */               conditionallyAddPoint(
/* 376 */                 "VGCLabels.total.flat.heap.before.gc", 
/* 377 */                 loaMatcher2.group(3));
/*     */             }
/*     */           }
/* 380 */           else if (this.line.contains("Insufficient space in Javaheap to satisfy allocation request")) {
/* 381 */             this.dataManager.updateLastComment("VGCLabels.action", 
/* 382 */               ": Insufficient space in Javaheap to satisfy allocation request");
/*     */           }
/*     */         }
/*     */       }
/*     */     }
/*     */   }
/*     */ 
/*     */   private final void tidyUpFromSystemGC()
/*     */   {
/* 391 */     if (this.isSys)
/* 392 */       voidTimestamp();
/*     */   }
/*     */ 
/*     */   private void handleCON()
/*     */     throws IOException
/*     */   {
/* 398 */     if ((this.line != null) && (this.line.indexOf("<CON[") >= 0))
/*     */     {
/* 401 */       this.isGoodData = true;
/* 402 */       this.isSys = false;
/*     */ 
/* 404 */       Matcher startMatcher = CON_START_PATTERN.matcher(this.line);
/*     */ 
/* 406 */       this.currentComment = 
/* 407 */         MessageFormat.format(REASON, 
/* 407 */         new Object[] { "con" });
/*     */ 
/* 409 */       tidyUpFromSystemGC();
/* 410 */       if (startMatcher.matches())
/*     */       {
/* 413 */         voidTimestamp();
/*     */ 
/* 415 */         conditionallyAddPoint("VGCLabels.free.soa.before.collection", 
/* 416 */           startMatcher.group(1));
/* 417 */         conditionallyAddPoint("VGCLabels.total.soa.before", 
/* 418 */           startMatcher.group(2));
/* 419 */         conditionallyAddPoint("VGCLabels.free.loa.before.collection", 
/* 420 */           startMatcher.group(3));
/* 421 */         conditionallyAddPoint("VGCLabels.total.loa.before", 
/* 422 */           startMatcher.group(4));
/* 423 */         conditionallyAddPoint("VGCLabels.trigger.intervals", 
/* 424 */           startMatcher.group(5));
/*     */       }
/*     */ 
/* 427 */       Matcher actionMatcher = CON_ACTION_PATTERN.matcher(this.line);
/*     */ 
/* 429 */       if (actionMatcher.matches()) {
/* 430 */         String actionCode = actionMatcher.group(1);
/* 431 */         conditionallyAddPoint("VGCLabels.action", actionCode);
/*     */       }
/*     */ 
/* 434 */       Matcher completedMatcher = CON_COMPLETED_PATTERN.matcher(this.line);
/* 435 */       if (completedMatcher.matches())
/* 436 */         conditionallyAddPoint("VGCLabels.gc.reasons", 
/* 437 */           VGCGCReasons.CON_INT);
/*     */     }
/*     */   }
/*     */ 
/*     */   private void handleGCDetail()
/*     */     throws IOException
/*     */   {
/* 444 */     if ((this.line != null) && (this.line.indexOf("<GC(") >= 0))
/*     */     {
/* 451 */       handleDate();
/* 452 */       handleTraced();
/* 453 */       handleRefs();
/* 454 */       handlePauses();
/* 455 */       handleFreed();
/* 456 */       handleRootScan();
/* 457 */       handleIndividualClassUnloading();
/* 458 */       handleClassUnloading();
/* 459 */       handleThreadTimes();
/*     */     }
/*     */   }
/*     */ 
/*     */   private void handleThreadTimes() throws IOException {
/* 464 */     Matcher threadTimeMatcher = THREAD_TIMES_PATTERN.matcher(this.line);
/* 465 */     if (threadTimeMatcher.matches()) {
/* 466 */       conditionallyAddPoint("VGCLabels.stop.thread.times", 
/* 467 */         threadTimeMatcher.group(1));
/* 468 */       conditionallyAddPoint("VGCLabels.start.thread.times", 
/* 469 */         threadTimeMatcher.group(2));
/*     */     }
/*     */   }
/*     */ 
/*     */   private void handleClassUnloading() throws IOException {
/* 474 */     if (this.line != null) {
/* 475 */       Matcher matcher = UNLOADED_PATTERN.matcher(this.line);
/*     */ 
/* 477 */       if (matcher.matches()) {
/* 478 */         voidTimestamp();
/*     */ 
/* 480 */         conditionallyAddPoint("VGCLabels.classes.unloaded", 
/* 481 */           matcher.group(1));
/*     */       }
/*     */     }
/*     */   }
/*     */ 
/*     */   private void handleRootScan()
/*     */     throws IOException
/*     */   {
/* 489 */     if (this.line != null) {
/* 490 */       Matcher rootScanMatcher = ROOT_SCAN_PATTERN.matcher(this.line);
/* 491 */       if (rootScanMatcher.matches())
/*     */       {
/* 493 */         conditionallyAddPoint("VGCLabels.root.scan.times", 
/* 494 */           rootScanMatcher.group(1));
/*     */       }
/*     */     }
/*     */   }
/*     */ 
/*     */   private void handleDate() throws IOException {
/* 500 */     if (this.line != null) {
/* 501 */       Matcher dateMatcher = DATE_PATTERN.matcher(this.line);
/*     */ 
/* 503 */       if (dateMatcher.matches()) {
/* 504 */         String date = dateMatcher.group(2);
/* 505 */         double timestamp = SovereignDateConverter.parseDate(date);
/* 506 */         setCurrentTimestamp(timestamp);
/*     */ 
/* 509 */         int nominalGCNumber = Integer.parseInt(dateMatcher.group(1));
/* 510 */         if (nominalGCNumber < this.previousNominalGCNumber) {
/* 511 */           logRestart();
/*     */         }
/*     */ 
/* 514 */         this.previousNominalGCNumber = nominalGCNumber;
/*     */ 
/* 516 */         Iterator leftovers = this.pendingData.iterator();
/* 517 */         while (leftovers.hasNext()) {
/* 518 */           Pender pender = (Pender)leftovers.next();
/* 519 */           String fieldName = pender.fieldName;
/* 520 */           double y = pender.y;
/* 521 */           addDataPoint(fieldName, y);
/*     */         }
/*     */ 
/* 526 */         if (this.isSys) {
/* 527 */           this.isGoodData = true;
/*     */ 
/* 530 */           addDataPoint("VGCLabels.gc.reasons", 
/* 531 */             VGCGCReasons.SYS_INT);
/*     */         }
/* 533 */         this.pendingData.clear();
/*     */       }
/*     */     }
/*     */   }
/*     */ 
/*     */   private void handleRefs()
/*     */     throws IOException
/*     */   {
/* 544 */     if (this.line != null) {
/* 545 */       Matcher refsMatcher = REFS_PATTERN.matcher(this.line);
/* 546 */       if (refsMatcher.matches()) {
/* 547 */         conditionallyAddPoint("VGCLabels.soft.references.cleared", 
/* 548 */           refsMatcher.group(1));
/* 549 */         conditionallyAddPoint("VGCLabels.weak.references.cleared", 
/* 550 */           refsMatcher.group(2));
/* 551 */         conditionallyAddPoint(
/* 552 */           "VGCLabels.objects.queued.for.finalization", 
/* 553 */           refsMatcher.group(3));
/* 554 */         conditionallyAddPoint("VGCLabels.phantom.references.cleared", 
/* 555 */           refsMatcher.group(4));
/*     */       }
/*     */     }
/*     */   }
/*     */ 
/*     */   private void handleTraced() throws IOException
/*     */   {
/* 562 */     if (this.line != null) {
/* 563 */       Matcher tracedMatcher = TRACED_PATTERN.matcher(this.line);
/* 564 */       tracedMatcher.matches();
/*     */     }
/*     */   }
/*     */ 
/*     */   private void handleIndividualClassUnloading()
/*     */     throws IOException
/*     */   {
/* 571 */     if (this.line != null) {
/* 572 */       Matcher matcher = CLASS_UNLOADED_PATTERN.matcher(this.line);
/* 573 */       matcher.matches();
/*     */     }
/*     */   }
/*     */ 
/*     */   private void handlePauses()
/*     */     throws IOException
/*     */   {
/* 580 */     Matcher markMatcher = PAUSES_PATTERN.matcher(this.line);
/* 581 */     if (markMatcher.matches()) {
/* 582 */       conditionallyAddPoint("VGCLabels.mark.times", markMatcher.group(1));
/* 583 */       conditionallyAddPoint("VGCLabels.sweep.times", markMatcher.group(2));
/* 584 */       conditionallyAddPoint("VGCLabels.compact.times", markMatcher.group(3));
/*     */     }
/*     */   }
/*     */ 
/*     */   private void handleFreed() throws IOException {
/* 589 */     if (this.line != null) {
/* 590 */       Matcher freedMatcher = FREED_PATTERN.matcher(this.line);
/* 591 */       if (freedMatcher.matches())
/*     */       {
/* 593 */         conditionallyAddPoint("VGCLabels.amount.freed", 
/* 594 */           freedMatcher.group(1));
/* 595 */         conditionallyAddPoint("VGCLabels.free.flat.heap", 
/* 596 */           freedMatcher.group(3));
/* 597 */         String total = freedMatcher.group(4);
/* 598 */         double totalN = Double.parseDouble(total);
/* 599 */         conditionallyAddPoint("VGCLabels.flat.heap.size", totalN);
/*     */ 
/* 601 */         String pauseTime = freedMatcher.group(5);
/* 602 */         conditionallyAddPoint(
/* 603 */           "VGCLabels.pause.times.without.exclusive.access", 
/* 604 */           pauseTime);
/*     */ 
/* 611 */         if (this.isSys)
/* 612 */           conditionallyAddPoint(
/* 613 */             "VGCLabels.pause.times.with.exclusive.access", 
/* 614 */             pauseTime);
/*     */       }
/*     */     }
/*     */   }
/*     */ 
/*     */   private void handleCompleted()
/*     */     throws IOException
/*     */   {
/* 622 */     if (this.line != null) {
/* 623 */       Matcher completedMatcher = GENERIC_COMPLETED_PATTERN.matcher(this.line);
/* 624 */       if (completedMatcher.matches())
/*     */       {
/* 629 */         String totalPauseTime = completedMatcher.group(2);
/* 630 */         conditionallyAddPoint(
/* 631 */           "VGCLabels.pause.times.with.exclusive.access", 
/* 632 */           totalPauseTime);
/*     */ 
/* 636 */         this.isSys = true;
/* 637 */         this.currentComment = 
/* 638 */           MessageFormat.format(REASON, 
/* 638 */           new Object[] { "sys" });
/*     */       }
/*     */     }
/*     */   }
/*     */ 
/*     */   protected boolean isTimeStampRelative()
/*     */   {
/* 655 */     return false;
/*     */   }
/*     */ 
/*     */   private void ensureTuplesAvailable() {
/* 659 */     String[] allTuples = { "VGCLabels.action", 
/* 660 */       "VGCLabels.classes.unloaded", "VGCLabels.mark.times", 
/* 661 */       "VGCLabels.sweep.times", "VGCLabels.compact.times", 
/* 662 */       "VGCLabels.pause.times.without.exclusive.access", 
/* 663 */       "VGCLabels.pause.times.with.exclusive.access", 
/* 664 */       "VGCLabels.stop.thread.times", "VGCLabels.start.thread.times", 
/* 665 */       "VGCLabels.soft.references.cleared", 
/* 666 */       "VGCLabels.weak.references.cleared", 
/* 667 */       "VGCLabels.objects.queued.for.finalization", 
/* 668 */       "VGCLabels.phantom.references.cleared", 
/* 669 */       "VGCLabels.free.flat.heap", "VGCLabels.flat.heap.size", 
/* 670 */       "VGCLabels.amount.freed", "VGCLabels.free.loa.before.collection", 
/* 671 */       "VGCLabels.free.soa.before.collection", "VGCLabels.total.loa.before", 
/* 672 */       "VGCLabels.total.soa.before", "VGCLabels.root.scan.times", 
/* 673 */       "VGCLabels.trigger.intervals", 
/* 674 */       "VGCLabels.request.sizes.which.triggered.failures", 
/* 675 */       "VGCLabels.request.sizes.which.triggered.failures", "VGCLabels.gc.reasons", 
/* 676 */       "VGCLabels.pinned.classes", "VGCLabels.jvm.restarts", 
/* 677 */       "VGCLabels.free.flat.heap.before.gc" };
/* 678 */     for (String tupleName : allTuples)
/* 679 */       this.dataManager.ensureExistanceOf(tupleName);
/*     */   }
/*     */ 
/*     */   private static class Pender
/*     */   {
/*     */     String fieldName;
/*     */     double y;
/*     */ 
/*     */     public Pender(String fieldName, double y)
/*     */     {
/* 648 */       this.fieldName = fieldName;
/* 649 */       this.y = y;
/*     */     }
/*     */   }
/*     */ }

